home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1989-04-11 | 16.0 KB | 687 lines |
- Close Editor
- Dim BUILD_SIZE(18,2)
- DR$="df0:"
- Global A1$,A2$,A3$,A4$,B2$,E1$,T1$,T2$,T3$,S1$,M2$,R1$,F$
- Global BUILD_SIZE(),BUILD_TOT,BUILD_HIT,BALLOONY,BALLOON_HIT
- Global LIGHTSOUT,SCORE,SAND,BALLOONS,HISCORE,NEW_HI,HINAME$,X1,Y1,LVL
- Do
- MAIN
- Loop
- Procedure MAIN
- SETCHAN
- SETUP
- Do
- SCORE_LOAD
- BALLOON_PLAY
- If NEW_HI
- NEW_NAME
- SCORE_SAVE
- End If
- GAME_OVER
- Loop
- End Proc
- Procedure BOMBDROP
- Bob 3,X Bob(1)-3,Y Bob(1),8
- Channel 3 To Bob 3
- Amal 3,B2$ : Amal On 3
- End Proc
- Procedure SOUND[X,N]
- If X>0 and X<107
- Sam Play %1,N,8363
- Else
- If X>106 and X<212
- Sam Play %10,N,8363
- Sam Play %1,N,8363
- Else
- Sam Play %10,N,8363
- End If
- End If
- End Proc
- Procedure BALLOON_UP
- If Chanan(9)=False and SAND>0 and Y Bob(1)>76 and Chanmv(7)=False
- Bob 9,X Bob(1),Y Bob(1),20
- Channel 7 To Bob 1 : Channel 9 To Bob 9
- Amal 7,A3$ : Amal On 7
- Amal 9,S1$ : Amal On 9
- BALLOONY=BALLOONY-16
- Dec SAND
- SAND_UPDATE
- End If
- End Proc
- Procedure BALLOON_DOWN
- If Chanan(9)=False and Chanmv(7)=False and Y Bob(1)<200
- Channel 7 To Bob 1
- Amal 7,A4$ : Amal On 7
- BALLOONY=BALLOONY+16
- End If
- End Proc
- Procedure DEFINE_ANIM
- A1$=" Anim 0,(1,20)(2,5)(3,60) ;"
- A1$=A1$+" Move -350,0,350 ;"
- A2$=" Anim 0,(6,6)(7,6) ; Move 0,200,200"
- A3$=" Move 0,-16,16"
- A4$=" Move 0,16,48"
- B2$=" Anim 0,(8,6)(9,6)(10,6) ; Move 0,200,75 "
- E1$=" Anim 1,(11,3)(12,3)(13,3)(14,3)(15,3)(16,3)(17,3)(18,3)(19,3) "
- T1$=" Anim 0,(26,10)(27,10); Move 350,0,150"
- T2$=" Anim 0,(28,10)(29,10); Move 350,0,200"
- T3$=" Anim 0,(30,20)(31,20); Move -390,0,390"
- R1$=" Anim 0,(32,6)(33,6); Move -320,0,320 "
- S1$=" Loop: Pause; Let RY=Y+3;Let Y=RY ; "
- S1$=S1$+"Test: If RY<232 Jump Loop;"
- S1$=S1$+"Anim 1,(21,7)(22,7)(23,7)"
- M2$="Anim 1,(15,6)(16,6)(17,6)(18,6)(19,6)"
- End Proc
- Procedure SET_ZONES[X,HT,TYPE]
- NUM=(X/16)+2
- Reset Zone NUM
- Set Zone NUM,X,HT To X+16,232
- BUILD_SIZE(NUM-2,1)=HT : BUILD_SIZE(NUM-2,2)=TYPE
- End Proc
- Procedure SCAPE_DRAW[HT]
- Colour 13,$995 : Ink 2,2,2 : Volume 40
- Bob 2,-20,205,26 : Bob 3,-20,205,28
- Channel(3) To Bob 3
- Amal 2,T1$ : Amal On 2
- Amal 3,T2$ : Amal On 3
- Sam Loop On
- Sam Play %1,7,8363
- Wait 75 : Amal Freeze : Wait 10
- Sam Loop Off : Volume 10
- BUILD_TOT=0
- For X=15 To 287 Step 16
- WHATBUILD=Rnd(2)
- WHATBUILD=(WHATBUILD*6)+1
- HEIGHT=(Rnd(HT)+1)
- If HEIGHT>9 Then HEIGHT=9
- For COUNT=0 To HEIGHT
- BUILD=WHATBUILD+Rnd(3)
- Inc BUILD_TOT
- Paste Icon X,216-(COUNT*16),BUILD
- Shoot : Wait 5
- Next COUNT
- Rem **** setup zones ****
- NUM=(X/16)+2 : HGHT=(216-((COUNT-1)*16))
- Reset Zone NUM
- Set Zone NUM,X,HGHT To X+15,232
- BUILD_SIZE(NUM-1,1)=HGHT : BUILD_SIZE(NUM-1,2)=WHATBUILD
- Next X
- Wait 50
- For J=1 To 3
- LIGHTS
- Wait 15
- Next J
- Flash Off
- Colour 13,$FFB
- Amal On 2 : Amal On 3 : Volume 40
- Sam Loop On
- Sam Play %10,7,8363
- While Chanmv(3) : Wend
- Volume 63
- Sam Loop Off
- Bob Off 2 : Bob Off 3
- End Proc
- Procedure CHECK_HITS
- If Chanmv(1)
- X=Zone(X Bob(1),Y Bob(1))
- If X>0
- If X>1
- BALLOON_CRASH
- End If
- End If
- End If
- If Chanmv(10)
- C=Bob Col(10,1 To 1)
- If C
- BALLOON_CRASH
- Else
- C=Bob Col(10,3 To 3)
- If C and Chanan(3)=True
- B=I Bob(10)
- If B>68 or B<55
- BOMB_TO_MISSILE[10]
- End If
- End If
- End If
- End If
- If Chanmv(2)
- C=Bob Col(2,3 To 3)
- If C and Chanan(3)=True
- B=I Bob(2)
- BOMB_TO_MISSILE[2]
- If SAND<9
- SAND_BONUS[B]
- End If
- End If
- End If
- If Chanmv(15)
- C=Bob Col(15,1 To 1)
- If C
- Bell(70)
- Inc BALLOONS : BALLOON_UPDATE : Bob Off 15
- End If
- End If
- For J=12 To 14
- If Chanmv(J)
- C=Bob Col(1,J To J)
- If C
- B=I Bob(J)
- If B=53 or B=54
- REPLENISH
- Bob Off J
- Else
- Bell(70)
- If SAND<9
- Inc SAND : SAND_UPDATE : Bob Off J
- End If
- End If
- End If
- End If
- Next J
- If Chanmv(3)
- If Not Chanan(4)
- X=Zone(X Bob(3),Y Bob(3))
- If X>0
- If X>1
- BOMB_BUILDING[X-1]
- Else
- BOMB_GROUND
- End If
- End If
- End If
- End If
- End Proc
- Procedure REPLENISH
- If Chanan(7)=False
- Sam Play %1100,2,8363
- Y=Y Bob(1)
- Y=Y-63 : Y$=Str$(Y)
- TEMP$=" Move 0,-"+Y$+","+Y$
- Channel 7 To Bob 1
- Amal 7,TEMP$ : Amal On 7
- BALLOONY=BALLOONY-Y
- End If
- End Proc
- Procedure BANG[X]
- Volume 50
- Bob Off 3
- Amal Off 3
- Channel 4 To Bob 4
- Amal 4,E1$ : Amal On 4
- SOUND[X,1]
- Volume 63
- End Proc
- Procedure BOMB_GROUND
- Bob 4,X Bob(3),232,11
- BANG[X Bob(3)]
- For J=1 To 4
- Screen Display 0,,35,,
- Wait 1
- Screen Display 0,,42,,
- Wait 1
- Next J
- Wait 20
- Bob Off 4
- Amal Off 4
- End Proc
- Procedure BOMB_BUILDING[X]
- X1=X Bob(3) : Y1=Y Bob(3)
- Bob 4,X1,Y1,11
- BANG[X Bob(3)]
- XLOC=(X*16)
- Paste Icon XLOC-1,BUILD_SIZE(X,1)-16,19
- Paste Icon XLOC-1,BUILD_SIZE(X,1),(BUILD_SIZE(X,2)+4)+Rnd(1)
- Add BUILD_SIZE(X,1),16
- Reset Zone X+1
- If BUILD_SIZE(X,1)<230
- Set Zone X+1,XLOC,BUILD_SIZE(X,1) To XLOC+16,232
- End If
- Wait 1 : Rem **** falls through while without wait!
- Rem *** check if buildings cleared ***
- Add SCORE,3 : SCORE_UPDATE
- Inc BUILD_HIT
- Bob Off 4
- Amal Off 4
- Wait 4 : Rem *** reload time
- End Proc
- Procedure SAND_BONUS[B]
- S=11
- Repeat
- Inc S
- Until Chanmv(S)=False or S=15
- If S<15
- R=Rnd(3)
- If R=3 and(B=51 or B=52)
- Bob S,X1,Y1-20,53
- RANGE=1000
- Else
- Bob S,X1,Y1,36
- RANGE=500
- End If
- Channel S To Bob S
- SPEED$=Str$(Rnd(1000)+RANGE)
- If R=3 and(B=51 or B=52)
- Amal S,"Anim 0,(53,20)(54,20);Move 0,-255,"+SPEED$
- Else
- Amal S,"Move 0,-250,"+SPEED$ : Amal On S
- End If
- Amal On S
- End If
- End Proc
- Procedure BALLOON_BONUS
- If Chanmv(15)=False
- Bob 15,X1,Y1,37
- Channel 15 To Bob 15
- SPEED$=Str$(Rnd(1000)+500)
- SPEED$=Mid$(SPEED$,2,Len(SPEED$))
- Amal 15,"Move 0,-250,"+SPEED$ : Amal On 15
- End If
- End Proc
- Procedure BALLOON_CRASH
- BALLOON_HIT=True
- X=X Bob(1) : Y=Y Bob(1)
- Bob Off 1 : Bob Off : Bob Off 10 : Bob 5,X,Y,1
- SOUND[X,4] : Bob 11,X+3,Y-5,15
- Channel 11 To Bob 11 : Amal 11,M2$ : Amal On 11
- Wait 10 : Bob Off 11 : Bob 5,X,Y,4 : Wait 5
- Bob 5,X,Y,5 : Wait 5 : Bob 5,X,Y,6
- Channel 5 To Bob 5 : Amal 5,A2$ : Amal On 5
- Repeat
- Until Y Bob(5)>225
- X=X Bob(5) : Bob Off 5 : Bob 4,X,232,6
- For K=0 To 5
- Bob 6,X+5,232-(K*5),11
- SOUND[X,1]
- Channel 6 To Bob 6 : Amal 6,E1$ : Amal On 6
- For J=1 To 4
- Screen Display 0,,35,, : Wait 1
- Screen Display 0,,42,, : Wait 1
- Next J
- Next K
- While Chanmv(6)=True : Wend
- Bob Off 4 : Bob Off 6 : Amal Off 6
- End Proc
- Procedure BOMB_TO_MISSILE[B]
- X1=X Bob(3) : Y1=Y Bob(3)
- Bob Off 3 : Bob Off B
- Bob 11,X1,Y1+5,15
- Channel 11 To Bob 11
- Amal 11,M2$ : Amal On 11
- Boom
- Wait 5
- While Chanan(11)
- Wend
- Bob Off 11
- Amal Freeze
- If B=10
- For J=1 To 25
- Add SCORE,5
- SCORE_UPDATE
- Bell(40)
- Next J
- End If
- Amal On
- End Proc
- Procedure _GET_READY
- For Y=270 To 25 Step -1
- Bob 6,100,Y,25
- Next Y
- Wait 70
- For Y=25 To 270
- Bob 6,100,Y,25
- Next Y
- Bob Off 6
- End Proc
- Procedure LIGHTS
- F1$="(FFB,"+Mid$(Str$(Rnd(10)+5),2,2)+")(996,"+Mid$(Str$(Rnd(10)+5),2,2)+")"
- Flash 13,F1$
- End Proc
- Procedure LVL_DONE
- While Chanmv(4)=True : Wend
- Wait 30
- SOUND[(X Bob(1)),3]
- Volume 30
- Sam Play %1100,2,8363
- Amal Off
- While Y Bob(1)>-3
- Bob 1,X Bob(1),Y Bob(1)-2,1
- Wait 2
- Wend
- Wait 10
- BUILD_CLEAR
- End Proc
- Procedure BUILD_CLEAR
- Ink 2,2,2 : Flash Off : Colour 31,$996
- Volume 63
- Bob 5,340,202,30
- Channel(5) To Bob 5
- Amal 5,T3$ : Amal On 5 : Wait 35
- Sam Play %10,6,8363
- Bob 6,X Bob(5)-5,232,32
- Amal 6,R1$ : Amal On 6
- While Chanmv(5)
- Screen Swap
- Bar X Bob(5)-5,210 To X Bob(5)+5,231
- If X Bob(5)>150
- If Rnd(2)=2
- Sam Play %10,6,5000+(Rnd(3000))
- End If
- Else
- If Rnd(2)=2
- Sam Play %1,6,5000+(Rnd(3000))
- End If
- End If
- Wait 7
- Wend
- Bob Off 5 : Bob Off 6 : Amal Off
- Wait 50
- End Proc
- Procedure BALLOON_UPDATE
- Ink 1,0
- T$=Right$(Str$(BALLOONS),Len(Str$(BALLOONS))-1)
- Text 296,11,T$
- End Proc
- Procedure LVL_UPDATE[LVL]
- Ink 1,0
- T$=Right$(Str$(LVL),Len(Str$(LVL))-1)
- Text 35,11,T$
- End Proc
- Procedure WIPE_SCORES
- Ink 1,0
- Text 35,11," "
- Text 95,11," "
- Text 148,11," "
- Text 218,11," "
- Text 296,11," "
- End Proc
- Procedure SCORE_UPDATE
- Ink 1,0
- T$=Right$(Str$(SCORE),Len(Str$(SCORE))-1)
- Text 95,11,T$
- If SCORE>HISCORE
- HISCORE=SCORE
- HISCORE_UPDATE
- NEW_HI=True
- End If
- If SCORE mod 2000=0
- BALLOON_BONUS
- End If
- End Proc
- Procedure HISCORE_UPDATE
- Ink 1,0
- T$=Right$(Str$(HISCORE),Len(Str$(HISCORE))-1)
- Text 148,11,T$
- End Proc
- Procedure SAND_UPDATE
- Ink 1,0
- T$=Right$(Str$(SAND),Len(Str$(SAND))-1)
- Text 218,11,T$
- End Proc
- Procedure LAUNCH_MISSILE
- Randomize Timer
- RANGE=140
- R=Rnd(4)
- If R=3 Then RANGE=100
- Y=Rnd(RANGE)+60
- Bob 10,-30,Y,34
- Channel 10 To Bob 10
- If R=0 and LVL>6
- M1$="Anim 0,(55,2)(56,2)(57,2)(58,2)(59,2)(60,2)(61,2)"
- M1$=M1$+"(55,2)(56,2)(57,2)(58,2)(59,2)(60,2)(61,2)"
- M1$=M1$+"(55,2)(56,2)(57,2)(58,2)(59,2)(60,2)(61,2)"
- M1$=M1$+"(55,2)(56,2)(57,2)(58,2)(59,2)(60,2)(61,2)"
- M1$=M1$+"(55,2)(56,2)(57,2)(58,2)(59,2)(60,2)(61,2)"
- M1$=M1$+"(55,2)(56,2)(57,2)(58,2)(59,2)(60,2)(61,2)"
- M1$=M1$+"(62,2)(63,2)(64,2)(65,2)(66,2)(67,2)(68,2)"
- M1$=M1$+"; Move 370,0,600"
- Else
- If R=1
- M1$="Anim 0,(40,6)(41,6) ; Move 370,0,150"
- Else
- If R=2
- M1$="Anim 0,(34,6)(35,6) ; Move 370,0,150"
- Else
- M1$="Anim 0,(44,2)(45,2)(46,2)(47,2)(48,2)(49,2)(50,2)"
- M1$=M1$+"(49,2)(48,2)(47,2)(46,2)(45,2) ; Move 370,0,150"
- End If
- End If
- End If
- Amal 10,M1$ : Amal On 10
- End Proc
- Procedure TRUCK
- Randomize Timer
- RANGE=150
- Volume 40
- R=Rnd(5)
- If R>1
- Bob 2,340,202,30
- Else
- Bob 2,-20,205,27
- End If
- Channel 2 To Bob 2
- Restore T
- For J=0 To R
- Read T$
- Next J
- If R=5 Then RANGE=150
- T$=T$+Mid$(Str$(Rnd(RANGE)+50),2,3)
- Amal 2,T$ : Amal On 2
- T:
- Data " Anim 0,(26,10)(27,10); Move 350,0,"
- Data " Anim 0,(28,10)(29,10); Move 350,0,"
- Data " Anim 0,(30,20)(31,20); Move -390,0,"
- Data " Anim 0,(38,8)(39,8); Move -390,0,"
- Data " Anim 0,(42,8)(43,8); Move -390,0,"
- Data " Anim 0,(51,8)(52,8); Move -390,0,"
- End Proc
- Procedure GAME_OVER
- For B=1 To 4
- Bob B,135,90,24
- Next B
- Amal 1,"Move -190,0,23"
- Amal 2,"Move 190,0,23"
- Amal 3,"Move 0,-140,17"
- Amal 4,"Move 0,170,17"
- While Not Fire(1) : Wend
- Bob 5,160,125,15
- Amal 5,M2$ : Shoot : Amal On 5
- Amal On 1 : Amal On 2 : Amal On 3 : Amal On 4
- Wait 1 : While Chanmv(4) : Wend
- For J=1 To 5
- Bob Off J
- Next J
- Wait 50
- End Proc
- Procedure BUILDING_LIGHTS
- If BUILD_HIT>(BUILD_TOT/2) and LIGHTSOUT=False
- If Rnd(3)=1
- LIGHTS
- Else
- If Rnd(15)=1
- Flash Off
- Colour 13,$FFB
- Flash 31,F$
- End If
- End If
- End If
- If BUILD_HIT>((BUILD_TOT/4)*3) and LIGHTSOUT=False
- LIGHTS
- Flash Off
- Colour 13,$996
- Flash 31,F$
- LIGHTSOUT=True
- End If
- End Proc
- Procedure NEW_NAME
- Synchro Off
- Flash Off
- Colour 31,$686
- Amal Off
- For B=1 To 16
- Bob Off B
- Next B
- Wait 60
- Sam Play 11,2,8363
- Get Cblock 1,80,64,160,96
- Paste Icon 85,66,22
- Ink 29,30
- L=Text Length(HINAME$)
- Text 150-L/2,101,HINAME$+"�S"
- X=12 : Y=16 : HINAME$=""
- Repeat
- K$=""
- K$=Inkey$
- If K$>""
- If Asc(K$)<>13
- If Asc(K$)=8 and X>12
- X=X-1
- HINAME$=Left$(HINAME$,(Len(HINAME$)-1))
- Text 105,134,HINAME$+" "
- Else
- If X<25
- K$=Upper$(K$)
- HINAME$=HINAME$+K$
- Text 105,134,HINAME$
- X=X+1
- End If
- End If
- End If
- End If
- Until Asc(K$)=13
- If HINAME$="" Then HINAME$=" "
- Put Cblock 1,80,64
- Screen Swap
- Put Cblock 1,80,64
- Screen Swap
- Synchro On
- End Proc
- Procedure PAUSE
- Amal Freeze : K$=""
- Bob 15,-100,70,69
- For J=-100 To 110
- Bob 15,J,70,69
- Next J
- Repeat
- K$=Inkey$
- Until Asc(K$)=32
- For J=110 To 400
- Bob 15,J,70,69
- Next J
- Bob Off 15
- Amal On : K$=""
- End Proc
- Procedure BALLOON_PLAY
- BALLOONS=6 : SAND=9 : SCORE=0 : YINC=10 : HT=2 : LVL=0
- GAME_END=False : Ink 2,2,2 : Bar 0,41 To 319,231 : WIPE_SCORES
- While GAME_END=False
- BALLOONX=330 : BALLOONY=53
- Bob 1,BALLOONX,BALLOONY,1
- BUILD_HIT=0
- LIGHTSOUT=False : FINISHED=False : BALLOON_HIT=False
- Inc HT : Inc LVL
- If HT>7 Then HT=HT+(HT/2)
- SCAPE_DRAW[HT]
- Flash 31,F$
- BALLOON_UPDATE
- LVL_UPDATE[LVL]
- SAND_UPDATE
- SCORE_UPDATE
- HISCORE_UPDATE
- _GET_READY
- While Not FINISHED
- Add BALLOONY,YINC
- Bob 1,BALLOONX,BALLOONY,1
- Channel 1 To Bob 1
- Amal 1,A1$
- Amal On 1
- While Chanmv(1)
- K$=Inkey$
- If Asc(K$)=32 Then PAUSE
- If Fire(1) and Chanmv(3)=False
- BOMBDROP
- End If
- If Jup(1)
- BALLOON_UP
- Else
- If Jdown(1)
- BALLOON_DOWN
- End If
- End If
- CHECK_HITS
- If BALLOON_HIT=True
- Dec BALLOONS
- BALLOON_UPDATE
- If BALLOONS>0
- Add BALLOONY,-(YINC*3)
- BALLOON_HIT=False
- _GET_READY
- End If
- End If
- If BALLOONS=0
- FINISHED=True : GAME_END=True
- End If
- If BUILD_HIT=BUILD_TOT
- Bob Off 12 : Bob Off 13 : Bob Off 14 : Bob Off 10 : Bob Off 2
- LVL_DONE
- FINISHED=True
- Else
- If Chanmv(10)=False and Chanan(2)=False and Chanmv(2)=False and Chanmv(1)=True
- R=Rnd(1)
- If R=1
- If(X Bob(1)>250) and Rnd(100)=1
- LAUNCH_MISSILE
- End If
- Else
- If Rnd(50)=1
- TRUCK
- End If
- End If
- End If
- End If
- If Chanmv(9)=False and Chanan(9)=False
- Bob Off 9
- End If
- If Chanmv(2)=False
- Bob Off 2
- End If
- If Chanmv(10)=False
- Bob Off 10
- End If
- BUILDING_LIGHTS
- Wend : Rem **** balloon loop
- Wend : Rem **** life lost
- Wend : Rem **** game end
- End Proc
- Procedure SETUP
- Screen Open 0,320,256,32,Lowres
- Hide : Hide
- Curs Off
- Flash Off
- Unpack 6 To 0
- Double Buffer
- Screen Show 0
- Get Palette 0
- Reserve Zone 25
- Set Zone 1,0,230 To 319,255
- DEFINE_ANIM
- F$="(0EE,2)(2EE,2)(4EE,2)(6EE,2)(8EE,2)(AEE,2)(CEE,2)"
- F$=F$+"(EEE,2)(CEE,2)(AEE,2)(8EE,2)(6EE,2)(4EE,2)(2EE,2)"
- End Proc
- Procedure SCORE_LOAD
- NEW_HI=False
- Open In 1,"df0:data/hiscore.dat"
- Input #1,HINAME$
- Input #1,HISCORE
- Close 1
- End Proc
- Procedure SCORE_SAVE
- Open Out 1,"df0:data/hiscore.dat"
- Print #1,HINAME$
- Print #1,HISCORE
- Close 1
- End Proc
- Procedure SETCHAN
- For C=1 To 15
- Channel C To Bob C
- Next C
- End Proc